package ace.cmp.spring.data.jdbc.querydsl.core.repository.handler;

import ace.cmp.spring.data.jdbc.querydsl.core.model.PropertyRelation;
import com.querydsl.core.types.Expression;

/**
 * @author caspar
 * @date 2024/6/26 16:03 创建版本号
 */
public interface QuerydslLogicDeleteGenerator {

  /**
   * 生成新的逻辑删除值
   *
   * @param entityClass      实体对象类型
   * @param propertyRelation 属性值类型
   * @return 逻辑删除的值
   */
  Object generateNewValueNotDelete(Class entityClass, PropertyRelation propertyRelation);

  /**
   * 根据提交的对象，生成新的逻辑删除sql表达式
   *
   * @param idExpression     实体id sql表达式
   * @param entityClass      实体对象类型
   * @param propertyRelation 属性值类型
   * @return 逻辑删除sql表达式
   */
  Expression generateNewExpression(Expression idExpression, Class entityClass,
      PropertyRelation propertyRelation);
}
